package java8.optional;

import java.util.Optional;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * @author 周宇
 * @create 2020-05-25 11:35
 */
public class OptionalTest {
    public static void main(String[] args) {
        //1.返回一个空的Optional，该实例的value为空
        Optional<Integer> optional = Optional.empty();
        //2.得到一个Optional容器包装的string对象
        Optional<String> name = Optional.of("浅瞳心雨");
        //3.运行传入空值和value 当传入的value非空时，与of()作用相同
        Optional<Object> onull = Optional.ofNullable(null);

        //1. get() 获取容器中的值
        System.out.println(name.get());
        //2. isPresent() 判断容器是否为null null->false 非null—>true
        System.out.println("optional对象的值不为null:" + optional.isPresent());
        //3. ifPresent(Consumer) 如果值存在则使用该值调用consumer , 否则不做任何事情。
        name.ifPresent((n) -> System.out.println("Hey " + n + "!"));
        //4. map(Function) 如果有值，则对其执行调用映射函数得到返回值 返回Optional对象
        //5. orElse () 如果存在该值，返回值， 否则返回 other。
        System.out.println(name.map(s -> "Hey " + s + "!").orElse("Hey Stranger!"));
        //6. orElseGet(Supplier) 如果存在该值，返回值， 否则触发Supplier的get方法获取对象。
        System.out.println(onull.orElseGet(() -> new String("String对象创建")));
        // 此外的hashCode和toString()是继承自Object对象 这里就不讲解啦
        //7.filter(Predicate) 返回瞒住条件的值
        System.out.println(name.filter(n -> n.length() > 4).isPresent() ? name
                .filter(n -> n.length() > 4).get() : "不满足条件返回null");
    }
}